/*******************************************************************************
 * Copyright (c) 2012-2017 Codenvy, S.A.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *   Codenvy, S.A. - initial API and implementation
 *******************************************************************************/
package org.eclipse.che.ide.api.recent;

import java.util.List;

/**
 * Recent list of abstract items.
 *
 * @author Vlad Zhukovskiy
 */
public interface RecentList<T> {
    /**
     * Check whether recent list is empty.
     *
     * @return true if empty
     */
    boolean isEmpty();

    /**
     * Add abstract item to the recent list.
     *
     * @param item
     *         item to add
     * @return true if item has been added
     */
    boolean add(T item);

    /**
     * Remove abstract item from the recent list.
     *
     * @param item
     *         item to remove
     * @return true if item has been removed
     */
    boolean remove(T item);

    /**
     * Check if item contains in recent list.
     *
     * @param item
     *         item to check
     * @return true if contains
     */
    boolean contains(T item);

    /**
     * Get all recent list items.
     *
     * @return list of abstract items
     */
    List<T> getAll();

    /**
     * Clear recent list.
     */
    void clear();
}
